/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.seguranca.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.seguranca.vo.PapelVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * Data Access Object - Papel
 * Camada de papel ao banco de dados da entidade Papel.
 *
 * @author Bruno Schifer Bernardi
 */
public class PapelDAO extends BaseDAO<PapelVO> {

    @Override
    public void inserir(PapelVO entidade) {
        ConstrutorSQL sql = new ConstrutorSQL();
        
        sql.append("INSERT INTO TB_PAPEL(CD_GRUPO, CD_USUARIO)");
        sql.append("VALUES (?, ?)");
        
        List<?> parametros = criarParametros(entidade.getCdGrupo(), entidade.getCdUsuario());
        
        Integer idGerado = ((Long) executarInsercao(sql.toString(), parametros)).intValue();

        entidade.setIdPapel(idGerado);
    }
    
    @Override
    public void alterar(PapelVO entidade) {
        ConstrutorSQL sql = new ConstrutorSQL();
        
        sql.append("UPDATE TB_PAPEL SET CD_GRUPO = ?, CD_USUARIO = ?");
        sql.append("WHERE ID_PAPEL = ?");
        
        executarAlteracao(sql.toString(), criarParametros(entidade.getCdGrupo(), entidade.getCdUsuario(), entidade.getIdPapel()));
    }
    
    @Override
    public void excluir(PapelVO entidade) {
        ConstrutorSQL sql = new ConstrutorSQL();
        
        sql.append("DELETE FROM TB_PAPEL");
        sql.append("WHERE ID_PAPEL = ?");
        
        executarAlteracao(sql.toString(), criarParametros(entidade.getIdPapel()));
    }
    
    @Override
    public PapelVO consultarPorId(Serializable id) {
        ConstrutorSQL sql = new ConstrutorSQL();
                
        sql.append("SELECT * FROM TB_PAPEL WHERE ID_PAPEL = ?");

        return consultarUm(sql.toString(), criarParametros(id));
    }
    
    @Override
    public List<PapelVO> consultarPorExemplo(PapelVO exemplo) {

        List<PapelVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_PAPEL T WHERE 1=1");

        mapearQueryParaExemplo(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

    @Override
    protected PapelVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        PapelVO papel = new PapelVO();
        papel.setIdPapel(rs.getInt("ID_PAPEL"));
        papel.setCdGrupo(new Integer(rs.getInt("CD_GRUPO")));
        papel.setCdUsuario(new Integer(rs.getInt("CD_USUARIO")));

        return papel;
    }
    
    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, PapelVO exemplo) {

        if (exemplo.getCdGrupo() != null) {
            query.append("AND T.CD_GRUPO = ?");
            adicionarParametro(exemplo.getCdGrupo());
        }

        if (exemplo.getCdUsuario() != null) {
            query.append("AND T.CD_USUARIO = ?");
            adicionarParametro(exemplo.getCdUsuario());
        }
    }
}